<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>根据已知的节点查找其他节点</title>
    <style>
        .selected{
            background: red;
        }
    </style>
    <script>
        function f1(){
            let i3 = document.getElementById("i3");
            // console.log(i3);
            i3.className = "selected";
        }
        function f2(){
            let i3 = document.getElementById("i3");
            // console.log(i3);
            i3.parentNode.className = "selected";
        }

        function fn(obj){
            obj.className = "selected";
        }
    </script>
</head>
<body>
<ul>
    <li>item1</li>
    <li>item2</li>
    <li id="i3">item3</li>
    <li>item4</li>
    <li>item5</li>
</ul>
<script>
    let i3 = document.getElementById("i3");
</script>
<!--
    在使用事件句柄的时候,其属性值也属于js的内容
    因此,可以使用在js中已经定义好的变量
-->
<button onclick="fn(i3)">当前节点</button>
<button onclick="fn(i3.parentNode)">父节点</button>
<!--
    在HTML中,文本也属于节点内容,这种节点称之为文本节点
    空白的内容也属于文本内容,内容的值是一个空
    因此,i3的上一个节点属于文本节点
    文本节点的上一个节点才是i2
-->
<button onclick="fn(i3.previousSibling.previousSibling)">上一个节点</button>
<button onclick="fn(i3.nextSibling.nextSibling)">下一个节点</button>
<!--
    同理,ul的第一个子节点是文本节点,文本节点的下一个节点才是i1
-->
<button onclick="fn(i3.parentNode.firstChild.nextSibling)">第一个节点</button>
<button onclick="fn(i3.parentNode.lastChild.previousSibling)">最后一个节点</button>
</body>
</html>